Projet Zuul de conception orientée objet en Java d'un jeu d'aventure
Forum des exercices du projet Zuul
Exercice 7.35
- Lire la suite du chapitre 7 [ci-joint] (si possible en anglais, sinon en français).
- Review the source code of the zuul-with-enums-v1 project to see how it uses the CommandWord type. The classes Command, CommandWords, Game and Parser have all been adapted from the zuul-better version to accommodate this change. Check that the program still works as you would expect.
La documentation du projet est là et les sources sont dans le fichier ci-joint.
Incorporez cette nouvelle conception dans votre jeu, mais attention à ne pas perdre les acquis des exercices précédents.
Je rencontre une difficulté majeure lors de la l'implémentation des enum dans le jeu.
Dans UserInterface, la méthode actionPerformed() appelait interpretCommand() de GameEngine. interpretCommand() prenait un paramètre de type String.
Mais maintenant que interpretCommand() prend un paramètre de type Command, je suis un peu perdu.
Il faudrait que j'arrive à utiliser la méthode getActionCommand() pour récupérer une String qui serait la key d'un élement de la HashMap de ComandWords, mais je ne vois pas du tout comment le faire. Ajouter un attribut ComandWords à UserIterface ? Ce serait bizarre...
[code supprimé pour ne pas influencer les futurs lecteurs]
Votre jeu fonctionnait quand actionPerformed() fournissait une String à interpreteCommand() (String qui était généralement récupérée dans l'entryField).
Maintenant, vous devez fournir le bon objet Command à interpreteCommand() d'après la String tapée. Votre Parser actuel vous fournit une fonction pour cela ; il faut juste l'adapter pour qu'au lieu d'être une String, le premier attribut de Command soit le bon CommandWord d'après la String tapée (mais la nouvelle classe CommandWords fournit une fonction pour cela).
AVANT : entryField --String--> actionPerformed() --String--> interpreteCommand()
APRÈS : entryField --String--> actionPerformed() --String--> Parser --String--> CommandWords --CommandWord--> Parser --Command--> actionPerformed() --Command--> interpreteCommand()Bonjour monsieur,
Après avoir implémenté ce programme, j'ai une erreur dans la classe GameEngine :
public void interpretCommand(String commandLine)
{
gui.println(commandLine);
Command command = parser.getCommand(commandLine);
[code supprimé pour ne pas influencer les futurs lecteurs]
}
Je ne comprends pas pourquoi j'ai une erreur ...
(Modifié par Denis BUREAU. Écrit initialement le vendredi 24 avril 2015, 15:42)
Bonjour, je rencontre un problème avec les enums:
J'ai effectué tous les changements demandé, mais il me reste un point noir à éclaircir et je ne vois pas comment...
Dans Userinterface, j'ai maintenant le code suivant:
private void processCommand()
{
boolean vFinished = false;
String vInput = entryField.getText();
entryField.setText("");
Command vCom = new Command(CommandWords.getCommand(vInput), ???);
engine.interpretCommand(vCom);
}
Dans la 4 e ligne du corps de processCommand, je sais que je dois renvoyer une commande (donc un commandWord et une string), mon problème est que je ne vois pas comment récupérer de ma string "vInput" le second mot.
Par exemple en tapant :"aller Nord", je ne vois pas comment récupérer "Nord"...
Pouvez vous m'aidez s'il vous plaît?
Cordialement
Ce n'est pas le travail de UserInterface de construire l'objet Command : c'est le travail du Parser !
(ça tombe bien, il y a justement une méthode pour cela dans le Parser)
Et depuis zuul-with-images, c'est au GameEngine d’interpréter (en utilisant le Parser) la ligne saisie dans UserInterface.
En résumé, il ne fallait modifier ni UserInterface.processCommand ni GameEngine.interpretCommand.
(c'est le Parser qui a été adapté à l'apparition de l'énumération CommandWord)
Réseaux sociaux